home *** CD-ROM | disk | FTP | other *** search
Text File | 1994-09-27 | 4.1 KB | 131 lines | [TEXT/CCL2] |
- ;;; print-modules.scm -- print routines for module-related AST structures
- ;;;
- ;;; author : Sandra Loosemore
- ;;; date : 6 Jan 1992
- ;;;
- ;;;
- ;;; This file corresponds to the file ast/modules.scm.
-
- ;;; Note: by default, only the module name is printed. To print the
- ;;; full module, the function print-full-module must be called.
-
- (define *print-abbreviated-modules* '#t)
-
- (define-ast-printer module (object xp)
- (if *print-abbreviated-modules*
- (begin
- (write-string (module-type-name object) xp)
- (write-string (symbol->string (module-name object)) xp))
- (do-print-full-module object xp)))
-
- (define (module-type-name mod)
- (if (interface-module? mod)
- "interface "
- "module "))
-
- (define (print-full-module object . maybe-stream)
- (let ((stream (if (not (null? maybe-stream))
- (car maybe-stream)
- (current-output-port))))
- (dynamic-let ((*print-abbreviated-modules* '#f))
- (pprint object stream))))
-
- (define (do-print-full-module object xp)
- (dynamic-let ((*print-abbreviated-modules* '#t))
- (let ((modid (module-name object))
- (exports (module-exports object))
- (body (append (module-imports object)
- (module-fixities object)
- (module-synonyms object)
- (module-algdatas object)
- (module-classes object)
- (module-instances object)
- (if (or (not (module-default object))
- (eq? (module-default object)
- *standard-module-default*))
- '()
- (list (module-default object)))
- (module-decls object))))
- (write-string (module-type-name object) xp)
- (write-modid modid xp)
- (when (not (null? exports))
- (write-whitespace xp)
- (write-commaized-list exports xp))
- (write-wheredecls body xp))))
-
- (define-ast-printer import-decl (object xp)
- (let ((modid (import-decl-module-name object))
- (mode (import-decl-mode object))
- (specs (import-decl-specs object))
- (renamings (import-decl-renamings object)))
- (with-ast-block (xp)
- (write-string "import " xp)
- (write-modid modid xp)
- (if (eq? mode 'all)
- (when (not (null? specs))
- (write-whitespace xp)
- (write-string "hiding " xp)
- (write-commaized-list specs xp))
- (begin
- (write-whitespace xp)
- (write-commaized-list specs xp)))
- (when (not (null? renamings))
- (write-whitespace xp)
- (write-string "renaming " xp)
- (write-commaized-list renamings xp))
- )))
-
- (define-ast-printer entity-module (object xp)
- (write-modid (entity-name object) xp)
- (write-string ".." xp))
-
- (define-ast-printer entity-var (object xp)
- (write-varid (entity-name object) xp))
-
- (define-ast-printer entity-con (object xp)
- (write-tyconid (entity-name object) xp))
-
- (define-ast-printer entity-abbreviated (object xp)
- (write-tyconid (entity-name object) xp)
- (write-string "(..)" xp))
-
- (define-ast-printer entity-class (object xp)
- (with-ast-block (xp)
- (write-tyclsid (entity-name object) xp)
- (write-whitespace xp)
- (write-delimited-list (entity-class-methods object) xp
- (function write-varid) "," "(" ")")))
-
- (define-ast-printer entity-datatype (object xp)
- (with-ast-block (xp)
- (write-tyconid (entity-name object) xp)
- (write-whitespace xp)
- (write-delimited-list (entity-datatype-constructors object) xp
- (function write-conid) "," "(" ")")))
-
-
- (define-ast-printer renaming (object xp)
- (with-ast-block (xp)
- (write-varid-conid (renaming-from object) xp)
- (write-string " to" xp)
- (write-whitespace xp)
- (write-varid-conid (renaming-to object) xp)))
-
- ;;; *** Should it omit precedence if it's 9?
-
- (define-ast-printer fixity-decl (object xp)
- (let* ((fixity (fixity-decl-fixity object))
- (associativity (fixity-associativity fixity))
- (precedence (fixity-precedence fixity))
- (ops (fixity-decl-names object)))
- (with-ast-block (xp)
- (cond ((eq? associativity 'l)
- (write-string "infixl " xp))
- ((eq? associativity 'r)
- (write-string "infixr " xp))
- ((eq? associativity 'n)
- (write-string "infix " xp)))
- (write precedence xp)
- (write-whitespace xp)
- (write-delimited-list ops xp (function write-varop-conop) "," "" ""))))
-